package com.spider.scheduler;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class WorkQueue {

	/* 已访问的 url 集合 */
	private static Set<String> visited = new HashSet<String>();

	/* 待访问的 url 集合 */
	private static BlockingQueue<String> unVisited = new LinkedBlockingQueue<String>();

	/**
	 * 获得待访问的URL队列
	 * 
	 * @return
	 */
	public static BlockingQueue<String> getUnVisitedQueue() {
		return unVisited;
	}

	/**
	 * 添加到访问过的URL队列中
	 * 
	 * @param url
	 */
	public static void addVisitedUrl(String url) {
		visited.add(url);
	}

	/**
	 * 未访问的URL出队列
	 * 
	 * @return
	 */
	public static String getUrl() {
		String url = unVisited.poll(); // 取出一个未访问的url
		return url;
	}

	/**
	 * 保证每个 url 只被访问一次
	 * 
	 * @param url
	 */
	public static void addUrl(String url) {
		if (url != null && !url.trim().equals("") && !visited.contains(url)
				&& !unVisited.contains(url))
			unVisited.add(url);
	}

	/**
	 * 获得已经访问的URL数目
	 * 
	 * @return
	 */
	public static int getVisitedSize() {
		return visited.size();
	}

	/**
	 * 判断未访问的URL队列中是否为空
	 * 
	 * @return
	 */
	public static boolean isEmpty() {
		return unVisited.isEmpty();
	}
}
